package musika;

import java.awt.EventQueue;

import javax.swing.ButtonGroup;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JRadioButton;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.ScrollPaneConstants;
import javax.swing.filechooser.FileNameExtensionFilter;

import java.awt.Dimension;
import java.awt.FileDialog;
import java.awt.Rectangle;
import java.io.File;
import java.security.acl.LastOwnerException;
import java.util.Iterator;
import java.util.Vector;

public class EI_Irakasle {

	private JFrame frmMusikebal;
	private int luzapena;
	private JLayeredPane pentLayer1 = new JLayeredPane();
	private int i1 = 109;
	private int i2 = 109;
	private int i3 = 109;
	private JLayeredPane pentLayer_2 = new JLayeredPane();
	private JLayeredPane pentLayer_3 = new JLayeredPane();
	private JComboBox comboAlterazioa = new JComboBox();
	private JRadioButton rdbtnPent1 = new JRadioButton("pent1");
	private JRadioButton rdbtnPent2 = new JRadioButton("pent2");
	private JRadioButton rdbtnPent3 = new JRadioButton("pent3");
	private int modifikadore1 = 0;
	private int modifikadore2 = 0;
	private int modifikadore3 = 0;
	private Vector<JLabel> notakPent1 = new Vector<JLabel>();
	private Vector<JLabel> notakPent2 = new Vector<JLabel>();
	private Vector<JLabel> notakPent3 = new Vector<JLabel>();
	private JLabel konpasMarra1 = null;
	private int pentagramaKargatzean = 0;
	private boolean kargatzen = false;

	public int getLuzapena() {
		return luzapena;
	}

	public void setLuzapena(int luzapena) {
		this.luzapena = luzapena;
	}

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					EI_Irakasle window = new EI_Irakasle();
					window.frmMusikebal.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public EI_Irakasle() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frameaSortu();

		pentagramakSortu();

		aukeraBotoiakSortu();

		menuBarraSortu();

		figuraBotoiak();

		besteLabelak();

		ezabatuBotoia();

		entzunBotoia();

		isiluneBotoia();

		frmMusikebal.setVisible(true);

	}

	public JFrame getFrmMusikebal() {
		return frmMusikebal;
	}

	/**
	 * Aukerak diren hiru pentagramak sortu.
	 * 
	 * @param erritmoa
	 *            : Parametro honek ariketaren erritmoa darama: 2/4,3/4 edo 4/4
	 */
	private void pentagramakSortu() {
		pentagramaSortu_1();

		pentagramaSortu_2();

		pentagramaSortu_3();
	}

	/**
	 * 3. pentagrama sortu
	 * 
	 * @param erritmoa
	 *            : Parametro honek ariketaren erritmoa darama: 2/4,3/4 edo 4/4
	 */
	private void pentagramaSortu_3() {
		JScrollPane pentScroll_3 = new JScrollPane();
		pentScroll_3.setBounds(22, 334, 672, 119);
		frmMusikebal.getContentPane().add(pentScroll_3);
		pentLayer_3.setPreferredSize(new Dimension(600, 500));

		pentLayer_3.setBackground(Color.WHITE);
		pentScroll_3.setViewportView(pentLayer_3);

		JLabel pentagrama_3 = new JLabel("");
		pentagrama_3.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/pentagrama.png")));
		pentagrama_3.setBounds(12, 14, 622, 92);
		pentLayer_3.add(pentagrama_3, pentLayer_3.DEFAULT_LAYER);

		JLabel lblErritmo3 = new JLabel("");
		erritmoIrudia(lblErritmo3);
		lblErritmo3.setBounds(65, 40, 20, 43);
		pentLayer_3.add(lblErritmo3, pentLayer_3.PALETTE_LAYER);

		MouseListener l1 = new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {

				notaMargotuKlik(e);

			}

		};
		pentLayer_3.addMouseListener(l1);

	}

	/**
	 * 2. pentagrama sortu
	 * 
	 * @param erritmoa
	 *            : Parametro honek ariketaren erritmoa darama: 2/4,3/4 edo 4/4
	 */
	private void pentagramaSortu_2() {
		JScrollPane pentScroll_2 = new JScrollPane();
		pentScroll_2.setBounds(22, 180, 672, 125);
		frmMusikebal.getContentPane().add(pentScroll_2);
		pentLayer_2.setPreferredSize(new Dimension(600, 500));

		pentLayer_2.setBackground(Color.WHITE);
		pentScroll_2.setViewportView(pentLayer_2);

		JLabel pentagrama_2 = new JLabel("");
		pentagrama_2.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/pentagrama.png")));
		pentagrama_2.setBounds(12, 12, 622, 98);
		pentLayer_2.add(pentagrama_2, pentLayer_2.DEFAULT_LAYER);

		JLabel lblErritmo2 = new JLabel("");
		erritmoIrudia(lblErritmo2);
		lblErritmo2.setBounds(65, 40, 20, 43);
		pentLayer_2.add(lblErritmo2, pentLayer_2.PALETTE_LAYER);

		MouseListener l1 = new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {

				notaMargotuKlik(e);
			}

		};
		pentLayer_2.addMouseListener(l1);

	}

	/**
	 * Emaitzaren pentagrama sortu
	 * 
	 * @param erritmoa
	 *            : Parametro honek ariketaren erritmoa darama: 2/4,3/4 edo 4/4
	 */
	private void pentagramaSortu_1() {
		JScrollPane pentScroll_1 = new JScrollPane();
		pentScroll_1.setBounds(22, 31, 672, 125);
		frmMusikebal.getContentPane().add(pentScroll_1);
		pentLayer1.setPreferredSize(new Dimension(600, 500));

		pentLayer1.setBackground(Color.WHITE);
		pentLayer1.setBounds(22, 31, 672, 125);
		pentScroll_1.setViewportView(pentLayer1);

		JLabel pentagrama_1 = new JLabel("");
		pentagrama_1.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/pentagrama.png")));
		pentagrama_1.setBounds(12, 12, 617, 97);
		pentLayer1.add(pentagrama_1, pentLayer1.DEFAULT_LAYER);

		JLabel lblErritmo1 = new JLabel("");
		erritmoIrudia(lblErritmo1);
		lblErritmo1.setBounds(65, 40, 20, 43);
		pentLayer1.add(lblErritmo1, pentLayer1.PALETTE_LAYER);

		MouseListener l1 = new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {

				notaMargotuKlik(e);

			}

		};
		pentLayer1.addMouseListener(l1);

	}

	/**
	 * Erritmoaren zenbakiak pentagrametan margotzen ditu.
	 * 
	 * @param labela
	 *            : Aurretik sortutako labela, zenbakien ikonoa daramana.
	 * @param erritmoa
	 *            : Erritmoaren balorea.
	 */
	private void erritmoIrudia(JLabel labela) {
		Kudeatzailea k1 = Kudeatzailea.getInstantzia();

		int erritmoa = k1.getUnekoa().getErritmoa();

		if (erritmoa == 24) {
			labela.setIcon(new ImageIcon(EI_Irakasle.class
					.getResource("/musika/24.png")));
		} else if (erritmoa == 34) {

			labela.setIcon(new ImageIcon(EI_Irakasle.class
					.getResource("/musika/34.png")));

		} else {

			labela.setIcon(new ImageIcon(EI_Irakasle.class
					.getResource("/musika/44.png")));

		}

	}

	/**
	 * Pentagramen idazketa eta entzumena aukeratzeko RadioButton-ak sortu.
	 */
	private void aukeraBotoiakSortu() {

		rdbtnPent1.setBounds(702, 86, 21, 23);
		rdbtnPent1.setSelected(true);
		frmMusikebal.getContentPane().add(rdbtnPent1);

		rdbtnPent2.setBounds(702, 242, 21, 23);
		frmMusikebal.getContentPane().add(rdbtnPent2);

		rdbtnPent3.setBounds(702, 387, 21, 23);
		frmMusikebal.getContentPane().add(rdbtnPent3);

		comboAlterazioa.setModel(new DefaultComboBoxModel(new String[] {
				"natural", "b", "#" }));
		comboAlterazioa.setBounds(441, 465, 80, 24);
		frmMusikebal.getContentPane().add(comboAlterazioa);

		ButtonGroup botoiTalde = new ButtonGroup();
		botoiTalde.add(rdbtnPent1);
		botoiTalde.add(rdbtnPent2);
		botoiTalde.add(rdbtnPent3);

	}

	/**
	 * Figurak aukeratzeko botoiak sortu.
	 */
	private void figuraBotoiak() {
		JButton btnBorobila = new JButton("");
		btnBorobila.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				setLuzapena(32);
			}
		});
		btnBorobila.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/borobila.png")));
		btnBorobila.setBounds(22, 465, 34, 47);
		frmMusikebal.getContentPane().add(btnBorobila);

		JButton btnTxuria = new JButton("");
		btnTxuria.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				setLuzapena(16);
			}
		});
		btnTxuria.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/txuria.png")));
		btnTxuria.setBounds(68, 465, 34, 47);
		frmMusikebal.getContentPane().add(btnTxuria);

		JButton btnBeltza = new JButton("");
		btnBeltza.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				setLuzapena(8);
			}
		});
		btnBeltza.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/beltza.png")));
		btnBeltza.setBounds(114, 465, 34, 47);
		frmMusikebal.getContentPane().add(btnBeltza);

		JButton btnKortxea = new JButton("");
		btnKortxea.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				setLuzapena(4);
			}
		});
		btnKortxea.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/kortxea.png")));
		btnKortxea.setBounds(160, 465, 34, 47);
		frmMusikebal.getContentPane().add(btnKortxea);

		JButton btnSemikortxea = new JButton("");
		btnSemikortxea.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				setLuzapena(2);
			}
		});
		btnSemikortxea.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/semikortxea.png")));
		btnSemikortxea.setBounds(206, 465, 34, 47);
		frmMusikebal.getContentPane().add(btnSemikortxea);

		JButton btnFusa = new JButton("");
		btnFusa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				setLuzapena(1);
			}
		});
		btnFusa.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/fusa.png")));
		btnFusa.setBounds(252, 465, 34, 47);
		frmMusikebal.getContentPane().add(btnFusa);

		botoiTaldeFigura(btnBorobila, btnTxuria, btnBeltza, btnKortxea,
				btnSemikortxea, btnFusa);

	}

	/**
	 * Pentagramen izenen labelak sortu.
	 */
	private void besteLabelak() {
		JLabel lblEmaitza = new JLabel("Emaitza:");
		lblEmaitza.setBounds(32, 12, 70, 15);
		frmMusikebal.getContentPane().add(lblEmaitza);

		JLabel lblAukera = new JLabel("1. Aukera:");
		lblAukera.setBounds(32, 163, 80, 15);
		frmMusikebal.getContentPane().add(lblAukera);

		JLabel lblAukera_1 = new JLabel("2. Aukera:");
		lblAukera_1.setBounds(32, 317, 92, 15);
		frmMusikebal.getContentPane().add(lblAukera_1);
	}

	/**
	 * Pentagrama bukatzeko botoia sortu.
	 */
	private void ezabatuBotoia() {
		JButton btnEzabatu = new JButton("<<<");
		btnEzabatu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				Kudeatzailea k1 = Kudeatzailea.getInstantzia();
				
				k1.getUnekoa().setAldatuta(true);

				if (rdbtnPent1.isSelected()) {

					i1 = notaEzabatu(notakPent1, 0, i1);

				} else if (rdbtnPent2.isSelected()) {

					i2 = notaEzabatu(notakPent2, 1, i2);

				} else if (rdbtnPent3.isSelected()) {

					i3 = notaEzabatu(notakPent3, 2, i3);
				}

			}

		});
		btnEzabatu.setBounds(441, 518, 80, 23);
		frmMusikebal.getContentPane().add(btnEzabatu);

	}
/**
 * Nota ezabatu egiten duen metodoa.
 * @param notakPent
 * @param indize
 * @param ind
 * @return
 */
	private int notaEzabatu(Vector<JLabel> notakPent, int indize, int ind) {
		if (notakPent.lastElement().getName().equalsIgnoreCase("pentagrama_1")) {

			notaLabelBektoretikKendu(notakPent);

			if (rdbtnPent1.isSelected()) {

				modifikadore1 = modifikadore1 - 97;

			} else if (rdbtnPent2.isSelected()) {

				modifikadore2 = modifikadore2 - 97;

			} else if (rdbtnPent3.isSelected()) {

				modifikadore3 = modifikadore3 - 97;
			}

			ind = 589;

			if (notakPent.lastElement().getName().equalsIgnoreCase(
					"konpasmarra")) {

				notaLabelBektoretikKendu(notakPent);
				int j = 0;

				for (int i = 0; i < notakPent.size(); i++) {

					if (notakPent.get(i).getName().equalsIgnoreCase(
							"konpasmarra")
							|| notakPent.get(i).getName().equalsIgnoreCase(
									"pentagrama_1")
							|| notakPent.get(i).getName().equalsIgnoreCase(
									"nota1")) {

						j++;

					}
				}

				if (j > 16) {

					ind = 589;

				} else {

					ind = 559;
				}

			}

			ezabatuNotaDatuEgituratik(indize);

		} else if (notakPent.lastElement().getName().equalsIgnoreCase(
				"konpasmarra")) {

			notaLabelBektoretikKendu(notakPent);

			ezabatuNotaDatuEgituratik(indize);

			ind = ind - 60;

		} else {

			ezabatuNotaDatuEgituratik(indize);

			ind = ind - 30;

		}

		notaLabelBektoretikKendu(notakPent);

		if (notakPent.lastElement().getName().equalsIgnoreCase("alt")
				|| notakPent.lastElement().getName()
						.equalsIgnoreCase("domarra")) {

			notaLabelBektoretikKendu(notakPent);

		}

		return ind;
	}
/**
 * Nota ezabatzerakoan labela bektoretik ezabatu egin
 * @param notakPent
 */
	private void notaLabelBektoretikKendu(Vector<JLabel> notakPent) {
		notakPent.lastElement().setVisible(false);
		notakPent.remove(notakPent.lastElement());
	}
/**
 * Nota ezabatzean datu egituratik nota ezabatzeko metodoa
 * @param indize
 */
	private void ezabatuNotaDatuEgituratik(int indize) {

		Kudeatzailea k1 = Kudeatzailea.getInstantzia();
		int erritmo = k1.getUnekoa().getErritmoa();
		Vector<Konpasa> konp = k1.getUnekoa().getPentagramak().get(indize)
				.getKonpasak();
		int uni = k1.getUnekoa().getPentagramak().get(indize).getKonpasak()
				.lastElement().getUnitateak();

		// datu egitura eguneratu egiten dugu

		if ((uni == 16 && erritmo == 24) || (uni == 24 && erritmo == 34)
				|| (uni == 32 && erritmo == 44)) {

			konp.remove(konp.lastElement());
			Konpasa konpas = konp.lastElement();
			Vector<Nota> notak = konpas.getNotak();

			konpas.setUnitateak(konpas.getUnitateak()
					+ notak.lastElement().getLuzapena());
			notak.remove(notak.lastElement());

		} else {
			Konpasa konpas = konp.lastElement();
			Vector<Nota> notak = konpas.getNotak();

			konpas.setUnitateak(konpas.getUnitateak()
					+ notak.lastElement().getLuzapena());
			notak.remove(notak.lastElement());

		}
	}

	/**
	 * Aukeratutako pentagrama entzuteko botoia sortu.
	 */
	private void entzunBotoia() {
		JButton btnEntzun = new JButton("Entzun");
		btnEntzun.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Kudeatzailea k1 = Kudeatzailea.getInstantzia();

				if (rdbtnPent1.isSelected()) {

					k1.midiSortu(0);
					k1.midiEntzun();
				} else if (rdbtnPent2.isSelected()) {
					k1.midiSortu(1);
					k1.midiEntzun();

				} else if (rdbtnPent3.isSelected()) {
					k1.midiSortu(2);
					k1.midiEntzun();

				}

			}
		});
		btnEntzun.setBounds(608, 491, 92, 25);
		frmMusikebal.getContentPane().add(btnEntzun);

	}

	/**
	 * Isilunea jartzeko botoia sortu
	 */
	public void isiluneBotoia() {
		JButton btnIsilune = new JButton("");
		btnIsilune.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				isiluneaMargotuKlik();

			}

		});
		btnIsilune.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/silenciobeltza.png")));
		btnIsilune.setBounds(332, 465, 34, 47);
		frmMusikebal.getContentPane().add(btnIsilune);
	}

	/**
	 * Figura aukeratzeko botoi taldea, bakarra aukeratuta egon dadin.
	 * 
	 * @param btnBorobila
	 * @param btnTxuria
	 * @param btnBeltza
	 * @param btnKortxea
	 * @param btnSemikortxea
	 * @param btnFusa
	 */
	private void botoiTaldeFigura(JButton btnBorobila, JButton btnTxuria,
			JButton btnBeltza, JButton btnKortxea, JButton btnSemikortxea,
			JButton btnFusa) {
		ButtonGroup figuraTalde = new ButtonGroup();
		figuraTalde.add(btnFusa);
		figuraTalde.add(btnSemikortxea);
		figuraTalde.add(btnKortxea);
		figuraTalde.add(btnBeltza);
		figuraTalde.add(btnTxuria);
		figuraTalde.add(btnBorobila);
	}

	/**
	 * Menu barra sortu.
	 */
	private void menuBarraSortu() {
		JMenuBar menuBar = new JMenuBar();
		frmMusikebal.setJMenuBar(menuBar);

		JMenu mnArtxiboa = new JMenu("Artxiboa");
		menuBar.add(mnArtxiboa);

		JMenuItem mntmBerria = new JMenuItem("Berria");
		mnArtxiboa.add(mntmBerria);
		mntmBerria.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				Kudeatzailea k1 = Kudeatzailea.getInstantzia();
				if (k1.getUnekoa().isAldatuta() == true) {

					new EI_GordeNahi(true);
					frmMusikebal.setVisible(false);

				} else {

					new EI_ArtxiboBerria();
					frmMusikebal.setVisible(false);
				}

			}
		});

		JMenuItem mntmGorde = new JMenuItem("Gorde honela...");
		mnArtxiboa.add(mntmGorde);
		mntmGorde.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				

				Kudeatzailea k1 = Kudeatzailea.getInstantzia();
				
				boolean betegabe = konpasakBetetaKonprobatu(k1);
				
				if (betegabe==true){
					
					new EI_BeteGabeErr();
					
				}else{
					
					String izena = k1.artxiboaGorde();
					frmMusikebal.setTitle("MusikEbal - " + izena);
					
				}
				
		

			}



		});

		JMenuItem mntmGorde2 = new JMenuItem("Gorde");
		mnArtxiboa.add(mntmGorde2);
		mntmGorde2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				Kudeatzailea k1 = Kudeatzailea.getInstantzia();
				
				boolean betegabe = konpasakBetetaKonprobatu(k1);
				
				if(betegabe==true){
					
					new EI_BeteGabeErr();
					
					
				}else{
					
					if (k1.getUnekoa().isAldatuta()) {

						File datuak = new File(k1.getArtxiboPath());
						k1.artxiboaSortu(datuak);
						k1.getUnekoa().setAldatuta(false);

					}
					
				}
				


			}

		});
		JMenuItem mntmIreki = new JMenuItem("Ireki...");
		mnArtxiboa.add(mntmIreki);
		

		mntmIreki.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Kudeatzailea k1 = Kudeatzailea.getInstantzia();
				
				String izena = k1.artxiboaIreki(false);
				frmMusikebal.setTitle("MusikEbal - " + izena);
				frmMusikebal.setVisible(false);

			}

		});
		
		JMenuItem mntmIrten = new JMenuItem("Irten");
		mnArtxiboa.add(mntmIrten);
		mntmIrten.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				new EI_GordeNahi(false);
				

			}
			


		});
		

	}
	/**
	 * Konpasa beteta dagoen ala ez konprobatzen duen metodoa
	 * @param k1
	 * @return
	 */
	private boolean konpasakBetetaKonprobatu(Kudeatzailea k1) {
		Vector<Pentagrama> pent= k1.getUnekoa().getPentagramak();
		Iterator it= pent.iterator();
		boolean top=false;
		Pentagrama penta;
		boolean betegabe=false;
		while (top==false && it.hasNext()){
			penta=(Pentagrama) it.next();
		
			Konpasa konp= penta.getKonpasak().lastElement();
			if (konp.getUnitateak()<16&& k1.getUnekoa().getErritmoa()==24){
				
				top=true;
				betegabe=true;
				
			} else if (konp.getUnitateak()<24 && k1.getUnekoa().getErritmoa()==34){
				
				top=true;
				betegabe=true;
				
			}else if (konp.getUnitateak()<32 && k1.getUnekoa().getErritmoa()==44){
				
				top=true;
				betegabe=true;
				
			}
			
		}
		return betegabe;
	}

	/**
	 * Framea sortu.
	 */
	private void frameaSortu() {
		Kudeatzailea k1 = Kudeatzailea.getInstantzia();
		frmMusikebal = new JFrame();

		// proba bezala erabili dut, beharbada aldatu, aldagai bezala pasatu
		// izena
		frmMusikebal.setTitle("MusikEbal - izenbururik gabeko artxiboa");

		frmMusikebal.setBounds(100, 100, 794, 615);
		frmMusikebal.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frmMusikebal.getContentPane().setLayout(null);
	}

	/**
	 * Metodo honi deitzean, marraztuko den figuraren irudia aukeratu egiten du.
	 * 
	 * @return: irudiaren PATH
	 */
	public String figuraIrudi(int luzapen) {
		String irudi = null;

		if (luzapen == 32) {

			irudi = "/musika/borobila";

		} else if (luzapen == 16) {

			irudi = "/musika/txuria";

		} else if (luzapen == 8) {

			irudi = "/musika/beltza";

		} else if (luzapen == 4) {

			irudi = "/musika/kortxea";

		} else if (luzapen == 2) {

			irudi = "/musika/semikortxea";

		} else if (luzapen == 1) {

			irudi = "/musika/fusa";

		}
		
		

		return irudi;

	}

	/**
	 * Metodo honi deitzean, marraztuko den isilunearen irudia aukeratu egiten
	 * du.
	 * 
	 * @return irudiaren PATH
	 */
	public String figuraIsilune(int luzapen) {
		String irudi = null;

		if (luzapen == 32) {

			irudi = "/musika/silencioborobil.png";

		} else if (luzapen == 16) {

			irudi = "/musika/silenciotxuria.png";

		} else if (luzapen == 8) {

			irudi = "/musika/silenciobeltza.png";

		} else if (luzapen == 4) {

			irudi = "/musika/silenciokortxea.png";

		} else if (luzapen == 2) {

			irudi = "/musika/silenciosemi.png";

		} else if (luzapen == 1) {

			irudi = "/musika/silenciofusa.png";

		}

		return irudi;

	}

	/**
	 * Metodo honek notaren labela sortu egiten du, eta honek daramatzan
	 * baldintza guztiak, do bada marra marraztu, sostenidoak eta bemolak, eta
	 * notaren koordenadak pentagraman kalkulatu egiten ditu.
	 * 
	 * @param nota
	 *            : Notaren izena
	 * @param irudi
	 *            : Notaren irudiaren PATH-a
	 * @param panela
	 *            : Nota jarriko den panela.
	 * @param X
	 *            : Notaren X koordenatua pentagraman.
	 * @param modifikadore
	 *            : Y koordenatuaren modifikadorea, pentagrama zuzenean margotu
	 *            dadin.
	 * @param alterazioa
	 *            : Notak sostenidoa edo bemola daraman parametroa.
	 */
	public void notaMargotu(String nota, String irudi, JLayeredPane panela,
			int X, int modifikadore, int alterazioa, int luzapen) {

		int koord = 0;
		// klikaren koordenatua - irudiaren tamaina (33)
		if (nota.equalsIgnoreCase("do")) {

			koord = 94 - 35 + modifikadore;

			JLabel domarra = new JLabel("");
			domarra.setIcon(new ImageIcon(EI_Irakasle.class
					.getResource("/musika/domarra.png")));
			domarra.setBounds(X - 3, koord + 11, 34, 47);
			panela.add(domarra, panela.DRAG_LAYER);
			domarra.setName("domarra");
			labelBektoreanSartu(domarra);

		} else if (nota.equalsIgnoreCase("re")) {

			koord = 89 - 35 + modifikadore;
		} else if (nota.equalsIgnoreCase("mi")) {

			koord = 84 - 35 + modifikadore;
		} else if (nota.equalsIgnoreCase("fa")) {

			koord = 79 - 35 + modifikadore;
		} else if (nota.equalsIgnoreCase("sol")) {

			koord = 73 - 35 + modifikadore;
		} else if (nota.equalsIgnoreCase("la")) {

			koord = 66 - 35 + modifikadore;
		} else if (nota.equalsIgnoreCase("si")) {

			koord = 61 - 35 + modifikadore;
		}else if (nota.equalsIgnoreCase("do2")) {

			koord = 56 - 14 + modifikadore;
		} else if (nota.equalsIgnoreCase("re2")) {

			koord = 51 -14  + modifikadore;
		} else if (nota.equalsIgnoreCase("mi2")) {

			koord = 47 -16  + modifikadore;
		} else if (nota.equalsIgnoreCase("fa2")) {

			koord = 43 -19  + modifikadore;
		} else if (nota.equalsIgnoreCase("sol2")) {

			koord = 39  -19 + modifikadore;
		} else if (nota.equalsIgnoreCase("la2")) {

			koord = 35  -19 + modifikadore;
			
			JLabel domarra = new JLabel("");
			domarra.setIcon(new ImageIcon(EI_Irakasle.class
					.getResource("/musika/domarra.png")));
			domarra.setBounds(X-1, koord - 12, 34, 47);
			panela.add(domarra, panela.DRAG_LAYER);
			domarra.setName("domarra");
			labelBektoreanSartu(domarra);
			
		} else if (nota.equalsIgnoreCase("si2")) {

			koord = 31  -19 + modifikadore;
			
			JLabel domarra = new JLabel("");
			domarra.setIcon(new ImageIcon(EI_Irakasle.class
					.getResource("/musika/domarra.png")));
			domarra.setBounds(X-1, koord - 7, 34, 47);
			panela.add(domarra, panela.DRAG_LAYER);
			domarra.setName("domarra");
			labelBektoreanSartu(domarra);
			
			
		}


		if (luzapen == 32) {
			koord = koord + 11;

		}

		if (alterazioa == 2) {

			JLabel alt = new JLabel("");
			alt.setIcon(new ImageIcon(EI_Irakasle.class
					.getResource("/musika/sostenido.png")));
			if (nota.contains("2")){
				
				alt.setBounds(X - 11, koord - 8 , 34, 47);
				
			}else{
				
				alt.setBounds(X - 11, koord + 10 , 34, 47);
				
			}
			
			panela.add(alt, panela.DRAG_LAYER);
			alt.setName("alt");
			labelBektoreanSartu(alt);

		} else if (alterazioa == 1) {

			JLabel alt = new JLabel("");
			alt.setIcon(new ImageIcon(EI_Irakasle.class
					.getResource("/musika/bemol.png")));
			
			if (nota.contains("2")){
				
				alt.setBounds(X - 12, koord - 9, 34, 47);
				
			}else{
				
				alt.setBounds(X - 12, koord + 9, 34, 47);
				
			}

			panela.add(alt, panela.DRAG_LAYER);
			alt.setName("alt");
			labelBektoreanSartu(alt);

		}
		
		if (nota.contains("2")){
			
			irudi = irudi + "2.png";
			
		}else{
			
			irudi = irudi + ".png";
			
		}

		JLabel nota1 = new JLabel("");
		nota1.setIcon(new ImageIcon(EI_Irakasle.class.getResource(irudi)));
		nota1.setBounds(X, koord, 34, 47);
		panela.add(nota1, panela.MODAL_LAYER);
		nota1.setName("nota1");
		Kudeatzailea k1 = Kudeatzailea.getInstantzia();
		k1.getUnekoa().setAldatuta(true);

		labelBektoreanSartu(nota1);

	}
/**
 * Sortutako labelak bektorean sartzen ditu
 * @param nota1
 */
	private void labelBektoreanSartu(JLabel nota1) {
		if ((rdbtnPent1.isSelected() && kargatzen == false)
				|| (pentagramaKargatzean == 0 && kargatzen == true)) {

			notakPent1.add(nota1);
			System.out.println(notakPent1.size());

		} else if ((rdbtnPent2.isSelected() && kargatzen == false)
				|| (pentagramaKargatzean == 1 && kargatzen == true)) {

			notakPent2.add(nota1);
			System.out.println(notakPent2.size());

		} else if ((rdbtnPent3.isSelected() && kargatzen == false)
				|| (pentagramaKargatzean == 1 && kargatzen == true)) {

			notakPent3.add(nota1);
			System.out.println(notakPent3.size());
		}
	}

	/**
	 * Metodo honek isilunearen labela marrazten du.
	 * 
	 * @param irudi
	 *            : Isilunea irudiaren PATH-a
	 * @param panela
	 *            : Isilunea jarriko den panela.
	 * @param X
	 *            : Isilunea marrazteko X koordenatua
	 * @param modifikadore
	 *            : Y koordenatuaren modifikadorea.
	 */
	public void isiluneaMargotu(String irudi, JLayeredPane panela, int X,
			int modifikadore) {

		JLabel nota1 = new JLabel("");
		nota1.setIcon(new ImageIcon(EI_Irakasle.class.getResource(irudi)));
		nota1.setBounds(X, 35 + modifikadore, 34, 47);
		panela.add(nota1, panela.MODAL_LAYER);

		Kudeatzailea k1 = Kudeatzailea.getInstantzia();
		k1.getUnekoa().setAldatuta(true);

		nota1.setName("nota1");

		labelBektoreanSartu(nota1);

	}

	/**
	 * Metodo honek nota sortu egiten du eta hau marrazteko eta datu egituran
	 * gehitzeko margotzeanZerKalkuloak metodoari deitzen dio.
	 * 
	 * @param e
	 * @param indize
	 * @param panela
	 * @param aukeratuta
	 * @param modifikadore
	 * @return
	 */
	public int notaMargotzeanZer(MouseEvent e, int indize, JLayeredPane panela,
			int aukeratuta, int modifikadore) {

		Kudeatzailea k1 = Kudeatzailea.getInstantzia();
		int y = e.getY();

		// Behar diren datuak hartu

		String nota = k1.zeinNota(y, modifikadore);
		int alterazioa = comboAlterazioa.getSelectedIndex();

		// Nota sortu

		Nota nota1 = new Nota(nota, luzapena, alterazioa);

		// Azken konpasa lortu

		Konpasa konp = k1.getUnekoa().getPentagramak().get(aukeratuta)
				.getKonpasak().lastElement();

		// Kalkuloak egin

		return margotzeanZerKalkuloak(nota, indize, panela, aukeratuta,
				modifikadore, k1, nota1, konp, alterazioa, luzapena);

	}

	/**
	 * metodo honek nota margotu egiten du eta datu egituran sartu egiten du.
	 * Konpasa beteta dagoen ala ez kalkulatzen du, eta honen tamaina
	 * gehiegizkoa den ala ez ere.
	 * 
	 * @param nota
	 * @param indize
	 * @param panela
	 * @param aukeratuta
	 * @param modifikadore
	 * @param k1
	 * @param nota1
	 * @param konp
	 * @param alterazioa
	 * @param luzapen
	 * @return
	 */
	private int margotzeanZerKalkuloak(String nota, int indize,
			JLayeredPane panela, int aukeratuta, int modifikadore,
			Kudeatzailea k1, Nota nota1, Konpasa konp, int alterazioa,
			int luzapen) {

		int uni = konp.getUnitateak();

		if (uni - luzapen < 0) {

			// errore

			new EI_ErroreKonpasTamaina();

		} else if (uni - luzapen == 0) {

			// nota gehitu eta konpasa itxi
			if (nota.equalsIgnoreCase("isilunea")) {

				isiluneaMargotu(figuraIsilune(luzapen), panela, indize,
						modifikadore);

			} else {
				notaMargotu(nota, figuraIrudi(luzapen), panela, indize,
						modifikadore, alterazioa, luzapen);
			}

			indize = indize + 30;

			konp.getNotak().add(nota1);

			konp.setUnitateak(0);

			// Konpas berria sortu
			Konpasa konp1 = new Konpasa(k1.getUnekoa().getErritmoa());

			k1.getUnekoa().getPentagramak().get(aukeratuta).getKonpasak().add(
					konp1);
			// Konpas marra marraztu
			JLabel konpasmarra = new JLabel("");
			konpasmarra.setIcon(new ImageIcon(EI_Irakasle.class
					.getResource("/musika/konpasa.png")));
			konpasmarra.setBounds(indize, 36 + modifikadore, 20, 55);
			panela.add(konpasmarra, panela.PALETTE_LAYER);
			konpasmarra.setName("konpasmarra");

			labelBektoreanSartu(konpasmarra);

			indize = indize + 30;

		} else if (uni - luzapen > 0) {
			// nota gehitu

			if (nota.equalsIgnoreCase("isilunea")) {

				isiluneaMargotu(figuraIsilune(luzapen), panela, indize,
						modifikadore);

			} else {
				notaMargotu(nota, figuraIrudi(luzapen), panela, indize,
						modifikadore, alterazioa, luzapen);
			}
			indize = indize + 30;

			konp.getNotak().add(nota1);

			konp.setUnitateak(uni - luzapen);

		}

		return indize;
	}

	/**
	 * Metodo honek isilunea margotzeko beharrezkoa egiten du.
	 * 
	 * @param indize
	 * @param panela
	 * @param aukeratuta
	 * @param modifikadore
	 * @return
	 */
	public int isiluneaMargotzeanZer(int indize, JLayeredPane panela,
			int aukeratuta, int modifikadore) {

		Kudeatzailea k1 = Kudeatzailea.getInstantzia();

		Nota nota1 = new Nota("isilunea", luzapena, comboAlterazioa
				.getSelectedIndex());
		Konpasa konp = k1.getUnekoa().getPentagramak().get(aukeratuta)
				.getKonpasak().lastElement();

		return margotzeanZerKalkuloak("isilunea", indize, panela, aukeratuta,
				modifikadore, k1, nota1, konp, 0, luzapena);
	}

	/**
	 * Metodo honek isiluneaMargotzeanZer metodoari deitzen dio, eta petagrama
	 * berri bat marraztea edo ez beharrezkoa den kalkulatzen du.
	 */
	public void isiluneaMargotuKlik() {
		if (rdbtnPent1.isSelected()) {
			i1 = isiluneaMargotzeanZer(i1, pentLayer1, 0, modifikadore1);
			if (i1 >= 619) {

				pentagramaBerria(modifikadore1, pentLayer1, i1);

			}

		} else if (rdbtnPent2.isSelected()) {

			i2 = isiluneaMargotzeanZer(i2, pentLayer_2, 1, modifikadore2);

			if (i2 >= 619) {

				pentagramaBerria(modifikadore2, pentLayer_2, i2);

			}
		} else if (rdbtnPent3.isSelected()) {

			i3 = isiluneaMargotzeanZer(i3, pentLayer_3, 2, modifikadore3);
			if (i3 >= 619) {

				pentagramaBerria(modifikadore3, pentLayer_3, i3);

			}
		}
	}

	/**
	 *Metodo honek notaMargotzeanZer metodoari deitzen dio, eta petagrama berri
	 * bat marraztea edo ez beharrezkoa den kalkulatzen du.
	 * 
	 * @param e
	 */
	private void notaMargotuKlik(MouseEvent e) {
		if (rdbtnPent1.isSelected()) {

			i1 = notaMargotzeanZer(e, i1, pentLayer1, 0, modifikadore1);
			if (i1 >= 619) {

				modifikadore1 = pentagramaBerria(modifikadore1, pentLayer1, i1);
				i1 = 109;

			}

		} else if (rdbtnPent2.isSelected()) {

			i2 = notaMargotzeanZer(e, i2, pentLayer_2, 1, modifikadore2);

			if (i2 >= 619) {

				modifikadore2 = pentagramaBerria(modifikadore2, pentLayer_2, i2);
				i2 = 109;

			}
		} else if (rdbtnPent3.isSelected()) {

			i3 = notaMargotzeanZer(e, i3, pentLayer_3, 2, modifikadore3);

			if (i3 >= 619) {

				modifikadore3 = pentagramaBerria(modifikadore3, pentLayer_3, i3);
				i3 = 109;

			}
		}
	}

	/**
	 * Metodo hone pentagrama berria margotzen du.
	 * 
	 * @param modifikadore
	 * @param panela
	 * @param indizea
	 * @return
	 */
	private int pentagramaBerria(int modifikadore, JLayeredPane panela,
			int indizea) {

		modifikadore = modifikadore + 97;
		JLabel pentagrama_1 = new JLabel("");
		pentagrama_1.setIcon(new ImageIcon(EI_Irakasle.class
				.getResource("/musika/pentagrama.png")));
		pentagrama_1.setBounds(12, 12 + modifikadore, 617, 97);
		panela.add(pentagrama_1, panela.DEFAULT_LAYER);
		pentagrama_1.setName("pentagrama_1");
		labelBektoreanSartu(pentagrama_1);

		return modifikadore;
	}

	/**
	 * artxibo bat irekitzerakoan pantaila margotzeko metodoa.
	 * 
	 * @param pentagrama
	 * @param konp
	 * @param nota1
	 */
	public void notaMargotuKargatzean(int pentagrama, Konpasa konp, Nota nota1) {

		int alterazioa = nota1.getAlterazioa();
		Kudeatzailea kud = Kudeatzailea.getInstantzia();
		String nota = nota1.getNota();
		int luzapen = nota1.getLuzapena();

		pentagramaKargatzean = pentagrama;
		kargatzen = true;

		if (pentagrama == 0) {

			pentagramaKargatzean = pentagrama;

			i1 = margotzeanZerKalkuloak(nota, i1, pentLayer1, pentagrama,
					modifikadore1, kud, nota1, konp, alterazioa, luzapen);
			if (i1 >= 619) {

				modifikadore1 = pentagramaBerria(modifikadore1, pentLayer1, i1);
				i1 = 109;
			}

		} else if (pentagrama == 1) {

			i2 = margotzeanZerKalkuloak(nota, i2, pentLayer_2, pentagrama,
					modifikadore2, kud, nota1, konp, alterazioa, luzapen);

			if (i2 >= 619) {

				modifikadore2 = pentagramaBerria(modifikadore2, pentLayer_2, i2);
				i2 = 109;
			}

		} else if (pentagrama == 2) {

			i3 = margotzeanZerKalkuloak(nota, i3, pentLayer_3, pentagrama,
					modifikadore3, kud, nota1, konp, alterazioa, luzapen);

			if (i3 >= 619) {

				modifikadore3 = pentagramaBerria(modifikadore3, pentLayer_3, i3);
				i3 = 109;
			}

		}

		kargatzen = false;

	}
}
